package com.emanga.emanga.app.deserializers; import com.emanga.emanga.app.controllers.App; import com.emanga.emanga.app.models.Chapter; import com.emanga.emanga.app.models.Page; import com.emanga.emanga.app.utils.Dates; import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.DeserializationContext; import com.fasterxml.jackson.databind.JsonDeserializer; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.node.NullNode; import java.io.IOException; import java.text.ParseException; import java.util.Collection; import java.util.Date; import java.util.Iterator; /** * Created by Ciro on 25/02/14. */ public class ChapterDeserializer extends JsonDeserializer<Chapter> { @Override public Chapter deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException { JsonNode node = jp.getCodec().readTree(jp); String _id = null; JsonNode _idNode = node.get("_id"); if(_idNode != null && !(_idNode instanceof NullNode)){ _id = _idNode.get("$oid").asText(); } Integer number = null; JsonNode numberNode = node.get("number"); if(numberNode != null && !(numberNode instanceof NullNode)){ number = numberNode.asInt(); } Date created_at = null; JsonNode created_atNode = node.get("created_at"); if(created_atNode != null && !(created_atNode instanceof NullNode)){ try { created_at = Dates.sdf.parse(created_atNode.asText()); } catch (ParseException e) { e.printStackTrace(); } } Chapter chapter = new Chapter(_id, number, created_at, null); JsonNode pagesNode = node.get("pages"); if(pagesNode != null && !(pagesNode instanceof NullNode)){ chapter.pages = App.getInstance().mMapper.readValue(pagesNode.toString(), new TypeReference<Collection<Page>>(){}); if(chapter.pages != null) { Iterator<Page> it = chapter.pages.iterator(); while(it.hasNext()){ it.next().chapter = chapter; } } } return chapter; } }